package com.axzhengxin.platform.business.mapper;

import com.axzhengxin.platform.business.domain.BizApplyInfo;
import com.axzhengxin.platform.business.domain.BizFlowInfoVo;
import com.axzhengxin.platform.statistics.domain.ProvinceStatistics;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 客户需求Mapper接口
 *
 * @author axzhengxin
 * @date 2021-02-20
 */
public interface BizApplyInfoMapper {
    /**
     * 查询客户需求
     *
     * @param reqId 客户需求ID
     * @return 客户需求
     */
    BizApplyInfo selectBizApplyInfoById(String reqId);

    /**
     * 查询客户需求列表
     *
     * @param bizApplyInfo 客户需求
     * @return 客户需求集合
     */
    List<BizApplyInfo> selectBizApplyInfoList(BizApplyInfo bizApplyInfo);

    /**
     * 新增客户需求
     *
     * @param bizApplyInfo 客户需求
     * @return 结果
     */
    int insertBizApplyInfo(BizApplyInfo bizApplyInfo);

    /**
     * 修改客户需求
     *
     * @param bizApplyInfo 客户需求
     * @return 结果
     */
    int updateBizApplyInfo(BizApplyInfo bizApplyInfo);

    /**
     * 删除客户需求
     *
     * @param reqId 客户需求ID
     * @return 结果
     */
    int deleteBizApplyInfoById(String reqId);

    /**
     * 批量删除客户需求
     *
     * @param reqIds 需要删除的数据ID
     * @return 结果
     */
    int deleteBizApplyInfoByIds(String[] reqIds);

    /**
     * 将抢单机构数量增加1
     *
     * @param reqId 需求ID
     * @return 更新行数
     */
    int increaseCheckCount(@Param(value = "reqId") String reqId);

    /**
     * 查询需求抢单列表
     * @param bizApplyInfo 需求对象
     * @return list集合
     */
    List<BizApplyInfo> selectApplyInfoList(BizApplyInfo bizApplyInfo);

    /**
     *
     * @param createBy 通过ID 获取名称
     * @return 名称
     */
    String getNameById(@Param(value = "userId") String createBy);

    /**
     * 判断当前用户下 需求是否有关联到流程表
     * @param map
     * @return
     */
   int checkExistFlowInfo(Map<String,Object> map);

    /**
     * 获取待审核列表
     * @param bizApplyInfo
     * @return
     */
    List<BizApplyInfo> selectAuditingList(BizApplyInfo bizApplyInfo);

    /**
     * 获取待授信列表
     * @param bizApplyInfo
     * @return
     */
    List<BizApplyInfo> selectApproveList(BizApplyInfo bizApplyInfo);

    /**
     * 获取贷款列表
     * @param applyInfo
     * @return
     */
    List<BizApplyInfo> loanList(BizApplyInfo applyInfo);

    /**
     * 担保列表
     * @param applyInfo
     * @return
     */
    List<BizApplyInfo> guaranteeList(BizApplyInfo applyInfo);

    List<ProvinceStatistics> selectNumericalStatementByDept(List<BizApplyInfo> list);

    List<ProvinceStatistics> selectNumericalStatementByDeptYearAndMonth(List<BizApplyInfo> list);

    List<BizApplyInfo> selectNumericalStatementByArea(List<BizApplyInfo> list);

    List<ProvinceStatistics> selectNumericalStatementByAreaYearAndMonth(List<BizApplyInfo> list);
    List<ProvinceStatistics> selectNumericalStatementByCustome(List<BizApplyInfo> list);

    /**
     * 获取抵押列表
     * @param applyInfo
     * @return
     */
    List<BizApplyInfo> pledgeList(BizApplyInfo applyInfo);


    /**
     * 获取flowUid
     * @param reqId
     * @return
     */
    List<BizFlowInfoVo> getFlowUidAndTaskId(String reqId);

    /**
     * 判断是否已撤销
     * @param reqId
     * @return
     */
    int checkBackFlag(String reqId);

    /**
     * 修改状态
     * @param reqId
     */
    void updateCancelFlag(@Param(value = "reqId") String reqId);

    /**
     * admin需求抢单list
     * @param bizApplyInfo
     * @return
     */
    List<BizApplyInfo> selectApplyInfoListAdmin(BizApplyInfo bizApplyInfo);

    /**
     * 保理订单list
     * @param applyInfo
     * @return
     */
    List<BizApplyInfo> factoringList(BizApplyInfo applyInfo);
}
